﻿//头文件
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
#include <iostream> 
#include<mmsystem.h>//包含多媒体设备接口头文件,一定放在graphics.h下面
#pragma comment(lib,"winmm.lib")//加载静态库


//定义数据
#define  window_length 820//游戏菜单窗口长度
#define  window_width  600//游戏菜单窗口宽度

const char* MENU_PATH = "menu_img";	//	游戏菜单贴图资源所在路径
IMAGE button[7];
char button_name[7][15] = { "button1", "button2", "button3", "button4", "button5","menu_snake","menu_text" };// 画按钮，单个墙的图片的像素宽、高均为40像素

void  button_img()
{
	for (int i = 0; i < 5; i++)
	{
		char filename[30] = "";//定义数组，分配缓冲区
		sprintf_s(filename, "%s/%s.png", MENU_PATH, button_name[i]);
		loadimage(button + i, filename);
		putimage(70, 120+i*80, &button[i]);
	}
	loadimage(&button[5], "menu_img/menu_snake.png");//加载菜单蛇图片
	putimage(320, 180, &button[5]);
	loadimage(&button[6], "menu_img/menu_text.png");//加载菜单标题图片
	putimage(225, 20, &button[6]);
}




void introduce_window();//介绍窗口


 //定义标识符
void nomal_botton();
int select();//点击选项
void menu(int choice, HWND start_window);
void end_mode(HWND startwindow);//结束模块
int return_back();//返回选项
void start_bgm();

void start_bgm()//背景音乐
{
	mciSendString("open start_bgm.mp3 alias BGM", 0, 0, 0);
	mciSendString("play BGM repeat", 0, 0, 0);
	return;
}

void start_window()//开始窗口
{
	initgraph(window_length, window_width);//启动窗口
	HWND startwindow = GetHWnd();//获取窗口句柄
	SetWindowText(startwindow, "贪吃蛇");//设置窗口标题
	//mciSendString("open start_bgm.mp3",0,0,0);
	while (1)
	{
		BeginBatchDraw();
		setbkcolor(RGB(55, 81, 68));
		cleardevice(); //调用清屏cleardevice用背景色刷新背景
		button_img();
		/*IMAGE start_bk;
		loadimage(&start_bk, "start_bk.jpg", getwidth(), getheight());//加载图片背景,图片自适应屏幕宽高
		putimage(0, 0, &start_bk);*/
		start_bgm();

		/*nomal_botton(25, 100, 200, 150, "开始游戏");//第一个按钮（x，y，宽，高，文本）
		nomal_botton(25, 200, 200, 250, "分数排行");//第二个按钮
		nomal_botton(25, 300, 200, 350, "游戏介绍");//第三个按钮
		nomal_botton(25, 400, 200, 450, "退出游戏");//第四个按钮*/

		setbkmode(TRANSPARENT);//显示透明文字
		settextcolor(WHITE);//设置字体颜色为白色
		settextstyle(20, 0, "宋体");//设置字体
		outtextxy(150, 530, "适度游戏益脑，沉迷游戏伤身。合理安排时间，享受健康生活。");
		outtextxy(150, 560, "抵制不良游戏，拒绝盗版游戏。注意自我保护，谨防受骗上当。");
			//输出文字

		FlushBatchDraw();
		int choice;//选项参数
		choice = select();//选择选项
		menu(choice, startwindow);//加载选项

	}
}

void nomal_botton(int left, int top, int right, int bottom, const char* text)//正常状态按钮
{
	setbkmode(TRANSPARENT);//设置字体背景透明
	char lingshi_text[50] = { 0 };//按钮内容
	strcpy_s(lingshi_text, text);//获取内容
	settextstyle(40, 0, "微软雅黑");//设置字体，高度为30，宽度自适应
	settextcolor(BLACK);

	setlinecolor(BLACK);//设置线条为黑色
	setlinestyle(PS_SOLID, 3);//设置线条类型为实线，宽为3
	roundrect(left, top, right, bottom, 50, 50);//设置按钮
    


	int text_x = left + (right - left - textwidth(lingshi_text)) / 2;//内容横坐标
	int text_y = top + (bottom - top - textheight(lingshi_text)) / 2;//内容纵坐标
	outtextxy(text_x, text_y, lingshi_text);
}

void abnomal_botton(int left, int top, int right, int bottom)//选中状态按钮
{
	BeginBatchDraw();
	

	setlinecolor(YELLOW);//设置点击后线条变黄色
	settextcolor(WHITE);//设置字体颜色
	setlinestyle(PS_SOLID, 3);//设置线条类型
	roundrect(left, top, right, bottom, 50, 50);//设置按钮，圆角值为50
	FlushBatchDraw();
}

int select()//点击选项模块
{
	
	ExMessage msg;
	while (1)
	{
		if (peekmessage(&msg, EM_MOUSE))//获取鼠标点击信息
		{
			switch (msg.message)//判断鼠标信息
			{
			case WM_LBUTTONDOWN://鼠标左键点击
				if (msg.x > 70 && msg.x < 275 && msg.y>120 && msg.y < 175)
				{
					abnomal_botton(70, 120, 275, 175);//点击后按钮状态
					Sleep(500);
					return 0;
				}
				else if (msg.x > 70 && msg.x < 275 && msg.y>200 && msg.y < 255)//选择难度模式
				{
					abnomal_botton(70, 200, 275, 255);//点击后按钮状态
					Sleep(500);
					return 1;
				}
				else if (msg.x > 70 && msg.x < 275 && msg.y>280 && msg.y < 335)//游戏介绍
				{
					abnomal_botton(70, 280, 275, 335);//点击后按钮状态
					Sleep(500);
					return 3;
				}
				else if (msg.x > 70 && msg.x < 275 && msg.y>360 && msg.y < 415)//退出游戏
				{
					abnomal_botton(70, 360, 275, 415);//点击后按钮状态
					Sleep(500);
					return 4;
				}
				else if (msg.x > 70 && msg.x < 275 && msg.y>440 && msg.y < 495)//退出游戏
				{
					abnomal_botton(70, 440, 275, 495);//点击后按钮状态
					Sleep(500);
					return 5;
				}
			default:
				return 6;
			}

		}
	}
}

















//以下代码为游戏开始代码
#undef UNICODE
#undef _UNICODE		//表示程序使用 MBCS 字符集：
#include <windows.h>
#pragma warning(disable:4996)	//禁用安全检查 _tcscpy、_stprintf

#define WIDTH 1170	/*	窗口大小  WIDTH * HIGHT 像素 尺寸需为 SIZE 的整数倍，  	 */
#define HIGHT 640		/*	蛇的行动在 A(SIZE,SIZE)到 B(WIDTH-FORM-SIZE,HIGHT-SIZE)之间的矩形内*/
#define FORM 250		/*	设置文字边框宽度	*/
#define SIZE 40			/*	每节蛇的尺寸		*/

#define COLOUR RGB(rand()%255,rand()%255,rand()%255)	/*rand()还是输出0~32767，只是了运用求余算符，除以255的余数在0至244，彩色 */

// 枚举值
enum Direction { right = 77, left = 75, down = 80, up = 72 };	//枚举方向值
enum Control   { F1 = 59, F2 = 60, Esc = 27 };					//枚举功能键值

// 全局变量
static int g_speed = 140;			//	速度(控制刷新的时间间隔)
static int g_status = 0;			//	游戏结束标志

// 全局常量
const char* IMAGE_PATH = "image";	//	贴图资源所在路径
const int SNAKE_LENGTH = 3;			//	初始，默认初始长度
const int SNAKE_TOWARD = right;		//	初始，默认蛇头方向
const int MAX_SIZE = 100;			//	蛇的最长长度
const int SHOW_TAIL = 1;			//	是否展示蛇尾巴，蛇尾不计入长度

/*---------------------------资源-------------------------------------*/
//蛇
typedef struct _snake
{
	int x[MAX_SIZE];		//坐标—X
	int y[MAX_SIZE];		//坐标—Y
	int len;				//当前长度
	int count;				//当前分数
	int direction;			//蛇头方向
}Snake;

//食物
typedef struct _food
{
	int x;					//坐标—X
	int y;					//坐标—Y
	int flg;				//标记食物是否已经出现
}Food;

// 图片对象
IMAGE img[8];		//墙，蛇头，身体，蛇尾，食物
IMAGE tips[4];		//其他界面图片

// 标记图片变量名
char name[8][15] = { "wall", "snakeHead", "body", "food", "snakeTailUp", "snakeTailDown", "snakeTailLeft", "snakeTailRight" };
char tipsName[4][15] = { "snake", "label", "gameover", "start" };

//加载图片
void loadResources()
{
	for (int i = 0; i < 8; i++)
	{
		char filename[30] = ""; //定义数组，分配缓冲区
		sprintf_s(filename, "%s/%s.png", IMAGE_PATH, name[i]);//sprintf_s()是sprintf()的安全版本，通过指定缓冲区长度来避免sprintf()存在的溢出风险。
		loadimage(img + i, filename);//加载图片
	}
	for (int i = 0; i < 4; i++)
	{
		char filename[30] = "";
		sprintf_s(filename, "%s/%s.png", IMAGE_PATH, tipsName[i]);
		loadimage(tips + i, filename);
	}
}


/************************************************************/
//变量
Snake snake;		//蛇
Food  food;			//食物
//函数
void PrintForm();		//文字提示框
void Init_Snake();		//初始化蛇
void Init_Food();		//初始化食物
void ShowSnake();		//贴图画蛇
void ShowFood();		//贴图画食物
void MoveSnake();		//蛇的移动
void KeyDown();			//控制
void EatFood();			//吃食物
void GameOver();		//游戏结束
int EndScreen();		//结束画面
void DrawWall();		//画墙
void play_window();

//右侧展示区域
void PrintForm()
{
	fillrectangle(0, 0, WIDTH, HIGHT - 1);	//边框

	LOGFONT f;                            //LOGFONT结构体
	gettextstyle(&f);                     // 获取当前字体设置
	f.lfHeight = 30;                      // 设置字体高度为 30
	_tcscpy(f.lfFaceName, _T("微软雅黑"));    // 设置字体为“微软雅黑”
	f.lfQuality = ANTIALIASED_QUALITY;    // 设置输出效果为抗锯齿  
	settextstyle(&f);                     // 设置字体样式

	putimage(WIDTH - FORM, 0, &tips[0]);	//贴图——卡通贪吃蛇
	putimage(WIDTH - FORM, 250, &tips[1]);	//提示框贴图，操作手册
	setbkmode(TRANSPARENT);					//文字透明方式
	settextcolor(LIGHTBLUE);				//文字颜色
	TCHAR  str[3][50];
	_stprintf(str[0], _T("  得分: %3d 分"), snake.count);      //path字串后再+上字串
	_stprintf(str[1], _T("  速度: %3d 级"), (140 - g_speed) / 20);
	_stprintf(str[2], _T("  长度: %3d 节"), snake.len);
	for (int i = 0; i < 3; ++i)
	{
		outtextxy(WIDTH - FORM + 10, i * 40 + 250, str[i]);	//指定位置输出字符串
	}

	TCHAR  str2[11][50];
	_stprintf(str2[0], _T(" 提示:"));
	_stprintf(str2[1], _T("  一枚果实10分，蛇最长  "));
	_stprintf(str2[2], _T("  100节，为通关。撞墙,"));
	_stprintf(str2[3], _T("  或撞到自己，游戏失败"));
	_stprintf(str2[4], _T("      "));
	_stprintf(str2[5], _T(" 按键:"));
	_stprintf(str2[6], _T("     F1 : 加速 "));
	_stprintf(str2[7], _T("     F2 : 减速"));
	_stprintf(str2[8], _T("    空格: 暂停"));
	_stprintf(str2[9], _T("    Esc : 退出 "));
	_stprintf(str2[10], _T("     "));
	settextcolor(BLACK);				//文字颜色
	f.lfHeight = 20;					// 设置字体高度为 20
	settextstyle(&f);					// 设置字体样式
	for (int i = 0; i < 11; i++)
	{
		outtextxy(WIDTH - FORM + 10, 400 + i * 20, str2[i]);	//指定位置输出字符串
	}

}

void Init_Snake()
{
	//初始化前三节蛇
	snake.x[0] = SIZE * 3;  //蛇头
	snake.y[0] = SIZE;

	snake.x[1] = SIZE * 2;  //蛇头后的第一节蛇身
	snake.y[1] = SIZE;

	snake.x[2] = SIZE;      //蛇头后的第二节蛇身
	snake.y[2] = SIZE;

	/*	说明:
	*	1. 其余蛇默认坐标为 0。
	*		如果初始长度 SNAKE_LENGTH 设置为更长，也无需初始化其他坐标
	*	2. 因为前三节蛇位置固定。
	*		因此，游戏开始时的S NAKE_TOWARD 蛇头方向，只能向右或向下。
	*		如果，向设定其他蛇头初始方向，需要修改前 SNAKE_TOWARD 节蛇的坐标。
	*/

	snake.count = 0;				// 初始化分数
	snake.len = SNAKE_LENGTH;		// 初始化蛇的长度等于3
	snake.direction = SNAKE_TOWARD;	// 初始化蛇头的方向为右
}

void Init_Food()
{
	srand((unsigned int)time(NULL));		/*srand() 用来设置 rand() 产生随机数时的随机数种子,防止随机数每次重复，常常使用系统时间来初始化，即使用 time函数来获得系统时间，
											然后将time_t型数据转化为(unsigned int)型再传给srand函数，即: srand((unsigned) time(&t));
											还有一个经常用法，不需要定义time_t型t变量,即: srand((unsigned int) time(NULL));
											直接传入一个空指针，因为你的程序中往往并不需要经过参数获得的数据*/
	int x = (WIDTH - FORM - SIZE) / SIZE;	//预留 FORM (文字边框)像素显示信息,x=(1170-250-40)/40=22
	int y = (HIGHT - SIZE) / SIZE;          //y=(640-40)/40=15

	//检查食物是否在蛇身上
	int i = 0;
	while (i < snake.len)
	{
		if (food.x == snake.x[i] && food.y == snake.y[i])	//食物在蛇身上
		{
			food.x = rand() % x * SIZE;		// *SIZE 保证食物地址为整数
			food.y = rand() % y * SIZE;		//rand() 产生的是伪随机数字，每次执行时是相同的; 若要不同, 用函数 srand() 初始化它。
		}
		if (food.x == 0 || food.y == 0)		/*判读食物是否在上边界或左边界（为什么不判断下边界或右边界？因为x=22，y=15，随机数对其取余结果范围
											分别为0-22，0-15，所以food.x的坐标范围为0-880，且能被40整除，food.y同理）*/
		{
			food.x = rand() % x * SIZE;
			food.y = rand() % y * SIZE;
		}

		++i;
	}
	food.flg = 1;     //一个食物
}

void ShowSnake()
{
	/*	画蛇身	*/
	int i;
	for (i = 1; i < snake.len - 1; ++i)	//若画蛇尾，条件为 i < snake.len - 1
	{
		putimage(snake.x[i], snake.y[i], &img[2]);
	}

	// 是否展示蛇尾
	if (SHOW_TAIL != 0 && g_status == 0)
	{
		if (snake.y[i - 1] < snake.y[i])			//倒数第一节在尾巴的上边，蛇尾向上
		{
			putimage(snake.x[i], snake.y[i], &img[4]);
		}
		else if (snake.y[i - 1] > snake.y[i])		//倒数第一节在尾巴的下边，蛇尾向下
		{
			putimage(snake.x[i], snake.y[i], &img[5]);
		}
		else if (snake.x[i - 1] < snake.x[i])		//倒数第一节在尾巴的左边，蛇尾向左
		{
			putimage(snake.x[i], snake.y[i], &img[6]);
		}
		else if (snake.x[i - 1] > snake.x[i])		//倒数第一节在尾巴的右边，蛇尾向右
		{
			putimage(snake.x[i], snake.y[i], &img[7]);
		}
	}

	/*	画蛇头	*/
	putimage(snake.x[0], snake.y[0], &img[1]);

}

//贴图画食物
void ShowFood()
{
	putimage(food.x, food.y, &img[3]);
}

//蛇的移动
void MoveSnake()
{
	//把蛇的后一节坐标移动到前一节的坐标位置
	for (int i = snake.len; i > 0; --i)
	{
		snake.x[i] = snake.x[i - 1];
		snake.y[i] = snake.y[i - 1];
	}
	//单独移动蛇头，根据蛇的方向移动
	switch (snake.direction)
	{
	case right:
		snake.x[0] += SIZE;
		break;
	case left:
		snake.x[0] -= SIZE;
		break;
	case up:
		snake.y[0] -= SIZE;
		break;
	case down:
		snake.y[0] += SIZE;
		break;
	default:
		break;
	}
}

// 按键处理
void KeyDown()
{
	// 暂停，退出
	char tmp = _getch();        //读取键值

	if (tmp == ' ')				//判定空格 暂停
	{
		TCHAR ss[] = _T("暂停，按下任意键继续");
		outtextxy(WIDTH * 3 / 10, HIGHT / 2, ss);
		tmp = _getch();
		if (tmp == ' ') return;
	}
	else if (tmp == Esc)				//判定Esc
	{
		TCHAR s[] = _T("即将退出游戏，请确认:Esc键 确认");
		TCHAR s1[] = _T("          按任意键取消");
		outtextxy(WIDTH * 3 / 10, HIGHT / 2, s);		//指定位置输出字符串
		outtextxy(WIDTH * 3 / 10, HIGHT / 2 + 40, s1);	//指定位置输出字符串
		tmp = _getch();
		if (tmp == 27)	 exit(0);		// 退出
	}
	else if (tmp == -32 || tmp == 0)
	{
		// ↑↓←→等按键，F1、F2等按键，有两个键值
		// 第二个是真实键值，在下面用 key = _getch(); 接收
	}
	else
	{
		// 键盘上 a\b\c\d 等按键，这里不做处理。
		return;
	}

	// 上下左右，加速减速
	char key = _getch();
	switch (key)
	{
	case right:
		if (snake.direction != left)	//不能相反方向移动
			snake.direction = right;
		break;
	case left:
		if (snake.direction != right)
			snake.direction = left;
		break;
	case up:
		if (snake.direction != down)
			snake.direction = up;
		break;
	case down:
		if (snake.direction != up)
			snake.direction = down;
		break;
	case F1:		//F1加速
		if (g_speed > 20)
		{
			g_speed -= 20;
		}
		break;
	case F2:		//F2减速
		if (g_speed < 280)
		{
			g_speed += 30;
		}
		break;
	default:
		break;

	}

}

//吃食物
void EatFood()
{
	if (food.x == snake.x[0] && food.y == snake.y[0])//食物坐标与蛇头坐标重合，吃到食物
	{
		++snake.len;        //蛇长度加一
		snake.count += 10;	//一个食物十分
		food.flg = 0;		//重置食物为0个
	}

}

//游戏结束
void GameOver()
{
	//通关
	if (snake.len == MAX_SIZE)		//最长长度
	{
		g_status = 1;
		return;
	}

	//撞墙
	else if (snake.x[0] < SIZE || snake.x[0] >= WIDTH - FORM - SIZE ||		//横坐标出界
		snake.y[0]<SIZE || snake.y[0]>HIGHT - SIZE * 2)		//纵坐标出界
	{
		g_status = 2;
		return;
	}

	for (int i = 1; i < snake.len; i++)
	{
		//撞自己
		if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])
		{
			g_status = 3;
			return;
		}
	}

}


//结束画面
int EndScreen()
{
	HWND End = GetHWnd();//获取窗口句柄
	if (g_status == 0) // 游戏没结束
	{
		return 0;
	}

	TCHAR s[100] = "", s2[50] = "";
	if (g_status == 1)
	{
		_stprintf(s, _T("恭喜 通关 GameOver!\n您的分数为%d分"), snake.count);
	}
	else if (g_status == 2)
	{
		_stprintf(s, _T("你撞墙了 GameOver!\n您的分数为%d分"), snake.count);
	}
	else if (g_status == 3)
	{
		_stprintf(s, _T("咬到自己了 GameOver!\n您的分数为%d分"), snake.count);
	}
	_stprintf(s2, _T("       按任意键结束....\n"));

	ShowSnake();			//画蛇，显示死亡状态
	setbkmode(TRANSPARENT);		//文字透明方式
	settextcolor(LIGHTBLUE);	//文字颜色

	// 结束文字分数提示
	outtextxy(WIDTH * 2 / 10 + SIZE, HIGHT / 2, s);		//指定位置输出字符串
	outtextxy(WIDTH * 2 / 10 + SIZE, HIGHT / 2 + SIZE, s2);	//指定位置输出字符串

	// 结束图片展示
	system("pause");
	putimage(0, 0, &tips[2]);		//贴图，结束界面
	outtextxy(WIDTH * 2 / 10 + SIZE, HIGHT / 2 + SIZE / 2, s);	//指定位置输出字符串
	return 1;

}

// 画墙，单个墙的图片的像素宽、高均为40像素
void  DrawWall()
{
	for (int i = 0; i < WIDTH - FORM; i += SIZE)
	{
		putimage(i, 0, &img[0]);
	}
	for (int i = 0; i < WIDTH - FORM; i += SIZE)
	{
		putimage(i, HIGHT - SIZE, &img[0]);
	}
	for (int j = 0; j < WIDTH - FORM; j += SIZE)
	{
		putimage(0, j, &img[0]);
	}
	for (int j = 0; j < WIDTH - FORM; j += SIZE)
	{
		putimage(WIDTH - FORM - SIZE, j, &img[0]);
	}
}
void play_window(){

	HWND introduce = GetHWnd();//获取窗口句柄
	BeginBatchDraw();
	EndBatchDraw();

	initgraph(WIDTH, HIGHT);	//初始化窗口大小
	loadResources();			//加载图片

	//setlinecolor(BLACK);		//画线颜色
	setfillcolor(WHITE);		//填充颜色
	fillrectangle(-1, -1, WIDTH, HIGHT);	//边框

	//putimage(200, 50, &tips[3]);
	//_getch();					// 按下任意键开始

	Init_Snake();				//初始化蛇
	Init_Food();				//初始化食物

	while (true)//强退
	{
		if (food.flg == 0)
		{
			Init_Food();		//当食物为0时，初始化食物
		}

		BeginBatchDraw();
		cleardevice();			//刷新窗口
		PrintForm();			//打印表框
		DrawWall();				//画墙
		ShowFood();				//画食物
		ShowSnake();			//画蛇
		EndBatchDraw();

		if (_kbhit())           //_kbhit函数检查键盘按键是否被按下
		{
			KeyDown();			//玩家控制蛇移动
		}

		MoveSnake();			//蛇移动
		EatFood();				//吃食物

		GameOver();				//检查游戏是否结束，设置结束标志位
		if (EndScreen() == 1)	//游戏结束，展示成绩		
		{
			g_status = 0;       //初始化游戏状态
			break;
		}
		Sleep(g_speed);			//控制速度，Sleep()里面的单位，是以毫秒为单位，所以如果想让函数滞留1秒的话，应该是Sleep(1000);
	}

	system("pause");		    //从程序里调用“pause”命令,等待用户按一个键，然后返回   
	start_window();
	return;
}



void menu(int choice, HWND startwindow)//菜单中转
{
	switch (choice)
	{

	case 0:
		play_window();
		return;


	case 3://游戏介绍
		introduce_window();
		return;
	case 5://退出游戏
		end_mode(startwindow);
		start_window();
		return;
	case 6:
		return;
	}
}

void introduce_window()//游戏介绍窗口
{
	int back;
	while (1)
	{
		BeginBatchDraw();//开始绘画
		HWND introduce = GetHWnd();//获取窗口句柄
		SetWindowText(introduce, "这么简单？有手就行");//更改窗口标题
		IMAGE introduce_bk;
		loadimage(&introduce_bk, "introduce_bk.png", getwidth(), getheight());//加载图片，设置背景
		putimage(0, 0, &introduce_bk);//输出图片
		nomal_botton(20, 20, 100, 70, "返回");//第一个按钮

		/*setbkmode(TRANSPARENT);//显示透明文字
		settextcolor(BLACK);//设置字体颜色为黑色
		settextstyle(20, 0, "宋体");//设置字体
		outtextxy(150, 230, "游戏操作：通过 W、A、S、D 四个键来控\t\n制蛇头的移动方向，吃掉食物，不断成长，获得积分！");
		outtextxy(150, 330, "游戏结束：蛇头咬到自身身体或撞到边框（墙）。");
		outtextxy(150, 430, "胜利条件：把墙撞穿");
		*/

		FlushBatchDraw();//停止绘画

		back = return_back();
		if (back == 4)
		{
			return;
		}
	}
	return;
}

int return_back()//游戏介绍返回点击
{

	ExMessage msg;
	while (1)
	{
		if (peekmessage(&msg, EM_MOUSE))//获取鼠标点击信息
		{
			switch (msg.message)//判断点击信息
			{
			case WM_LBUTTONDOWN://开始游戏
				if (msg.x > 20 && msg.x < 1000 && msg.y>20 && msg.y < 70)
				{
					abnomal_botton(20, 20, 100, 70);//点击后按钮状态
					Sleep(500);
					return 4;
				}

			default:
				return 5;
			}
		}
	}
}


void end_mode(HWND startwindow)//结束模块
{
	int answer = MessageBox(startwindow, "呜呜呜(っ╥╯﹏╰╥c)，真的要结束游戏吗？", "贪吃蛇", MB_OKCANCEL);//添加选择框内容
	if (answer == IDOK)
	{
		closegraph();//结束游戏
		mciSendString("close bgm.mp3 ", 0, 0, 0);
		exit(-1);//返回菜单界面的上一级，既关闭菜单界面
	}
	else if (answer == IDCANCEL)//回到游戏界面
	{
		return;
	}
}


//主程序
int main()
{
	start_window();//加载开始界面
	//游戏开始
	//游戏结束
	return 0;//退出游戏
}

